const { Container, Maybe } = require('./support')
const fp = require('lodash/fp')

// 练习1 使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([ 5, 6, 1 ])
let ex1 = fp.flowRight(fp.map(fp.add(1)))
maybe = maybe.map(ex1)
// console.log(maybe.value)

// 练习2 实现一个函数ex2 能够使用fp.first获取列表的第一个元素
let xs = Container.of([ 'do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do' ])
let ex2 = (xs) => {
	return xs.map(fp.first).value
}
// console.log(ex2(xs))

// 练习3 实现一个函数ex3 使用safeProp和fp.first找到user的名字和首字母
let safeProp = fp.curry(function(x, o) {
	return Maybe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = (user) => {
	return safeProp('name', user).map(fp.first).value
}
// console.log(ex3(user))

// 练习4 使用Maybe重写ex4 不要有if语句
let ex4 = (value) => {
	return Maybe.of(value).map(parseInt).value
}
// console.log(ex4(undefined))
